﻿using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using AudiPyme.BLL;
using System.IO;
using System.Data;
using AudiPyme.DAL;
using System.Threading;
using Microsoft.Reporting.WebForms;
using System.Web.UI.HtmlControls;

namespace AudiPyme.UI
{
    public partial class InformesConsultar : System.Web.UI.Page
    {
        //Estructura que se usa para recoger los informes seleccionados en la interfaz
        public struct InformeCheck
        {
            int idInforme;
            bool check;

            public int IdInforme
            {
                get { return idInforme; }
                set { idInforme = value; }
            }


            public bool Check
            {
                get { return check; }
                set { check = value; }
            }

            public InformeCheck(int IdInforme, bool Check)
            {
                idInforme = IdInforme;
                check = Check;
            }
        }

        //Estructura para formatear la información de los informes a la tabla de la interfaz
        public struct InformeTabla
        {
            int idInforme;
            DateTime fecha;
            String tipoInforme;

            public String TipoInforme
            {
                get { return tipoInforme; }
                set { tipoInforme = value; }
            }

            public int IdInforme
            {
                get { return idInforme; }
                set { idInforme = value; }
            }

            public DateTime Fecha
            {
                get { return fecha; }
                set { fecha = value; }
            }

            public InformeTabla(int IdInforme, DateTime Fecha, String TipoInforme)
            {
                idInforme = IdInforme;
                fecha = Fecha;
                tipoInforme = TipoInforme;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                int IdEmpresa = DatosEmpresa();
                if (IdEmpresa != -1)
                {
                    try
                    {
                        //Creamos la estructura para almacenar los elementos elegidos en el gridview
                        //Número de controles seleccionados actualmente
                        int nControlesOn = 0;
                        //Se recoge el número de informes que tiene una empresa
                        int numInf = InformesFactory.NumeroInformesEmpresa(IdEmpresa);
                        GeneraOpciones(IdEmpresa, numInf);
                        List<int> Contador = new List<int>(numInf);
                        //Inicializamos la estructura
                        for (int i = 0; i < Contador.Capacity; i++)
                        {
                            Contador.Insert(i, 0);
                        }
                        //Inicializamos la estructura que va a almacenar los estados de los Informes
                        List<InformeCheck> CheckList = new List<InformeCheck>(numInf);
                        //Guardamos en variables de sesión
                        Session["CheckList"] = CheckList;
                        Session["nControlesOn"] = nControlesOn;
                        String TextoBuscar = TxtFiltro.Text;
                        LlenaGridView(TextoBuscar);
                    }
                    catch (Exception e1)
                    {
                        e1.ToString();
                        MuestraMensaje("Error al cargar la página");
                    }

                }
                else
                {
                    MuestraMensaje("No se pudo recoger la empresa");
                }
            }
        }

        //Método que sirve para generar las opciones de navegación en tiempo de ejecución
        private void GeneraOpciones(int IdEmpresa, int NumeroInformesEmpresa)
        {
            try
            {
                //Se recoge el número de activos que tiene la empresa
                int NumActivosEmp = ActivosEmpresaFactory.NumeroTotalesActivosEmpresa(IdEmpresa);
                //Si la empresa tiene activos
                if (NumActivosEmp != 0)
                {
                    int NumRelTipActAmenCrit = InstanciaTiposActivosAmenazasCriteriosRiesgoFactory.NumRelacTipAmenCritEmpresa(IdEmpresa);
                    int NumRelTipActVuln = InstanciaTiposActivosVulnerabilidadesFactory.NumRelacTipActVuln(IdEmpresa);
                    //Si la empresa tiene activos y relaciones puede generar un informe
                    if (NumRelTipActAmenCrit != 0 && NumRelTipActVuln != 0)
                    {
                        HtmlGenericControl opc2 = new HtmlGenericControl("li");
                        ListaOpciones.Controls.Add(opc2);
                        HtmlGenericControl anchor2 = new HtmlGenericControl("a");
                        anchor2.Attributes.Add("href", "InformesPrincipal.aspx");
                        anchor2.InnerText = "Informes Principal";
                        opc2.Controls.Add(anchor2);
                    }
                }
                int NumInformesEmp = EmpresaInformeFactory.NumeroInformesEmpresa(IdEmpresa);
                if (NumInformesEmp != 0)
                {
                    HtmlGenericControl opc1 = new HtmlGenericControl("li");
                    ListaOpciones.Controls.Add(opc1);
                    HtmlGenericControl anchor1 = new HtmlGenericControl("a");
                    anchor1.Attributes.Add("href", "InformesGestionar.aspx");
                    anchor1.InnerText = "Gestionar Informes";
                    opc1.Controls.Add(anchor1);
                }

                //Si la empresa tiene mas de dos informes, aparece la opción de la evolución del informe
                if (NumeroInformesEmpresa >= 2)
                {
                    //Se añade la opción de Informes Evolucion
                    HtmlGenericControl opc3 = new HtmlGenericControl("li");
                    ListaOpciones.Controls.Add(opc3);
                    HtmlGenericControl anchor2 = new HtmlGenericControl("a");
                    anchor2.Attributes.Add("href", "InformesEvolucion.aspx");
                    anchor2.InnerText = "Infome de Evolución de la Empresa";
                    opc3.Controls.Add(anchor2);
                }
            }
            catch (System.Web.HttpException e1)
            {
                e1.ToString();
            }

        }

        private void LlenaGridView(String TextoBuscar)
        {
            try
            {
                TextoBuscar = TxtFiltro.Text;
                int IdEmpresa = DatosEmpresa();
                if (IdEmpresa != -1)
                {
                    List<Informes> LInformes = InformesFactory.InformesEmpresa(IdEmpresa);
                    GVAmenazas.DataSource = LInformes;
                    GVAmenazas.DataBind();
                    if (TextoBuscar.Equals(""))
                    {
                        GVAmenazas.DataSource = LInformes;
                        DataBind();
                    }
                    else
                    {
                        int dia = 0; int mes = 0; int anio = 0;
                        //Comprobamos que el texto introducido es una fecha
                        if (EsFecha(TextoBuscar))
                        {
                            dia = int.Parse(TextoBuscar.Substring(0, 2));
                            mes = int.Parse(TextoBuscar.Substring(3, 2));
                            anio = int.Parse(TextoBuscar.Substring(6, 4));
                            //Recogemos los Informes con la fecha del textbox
                            LInformes = InformesFactory.InformesPorFecha(IdEmpresa, dia, mes, anio);
                        }
                        else
                        {
                            MuestraMensaje("No se especifico una fecha válida. Formato de fecha: dd-mm-aaaa");
                        }
                        if (LInformes.Count() == 0)
                        {
                            MuestraMensaje("No se encontraron Informes con fecha: " + TextoBuscar);
                        }
                        else
                        {
                            GVAmenazas.DataSource = LInformes;
                            DataBind();
                        }
                    }
                }
                else
                {
                    PnlGV.Visible = false;
                    MuestraMensaje("No se pudo recuperar el Id de Empresa");
                }
            }
            catch (Exception e1)
            {
                e1.ToString();
                MuestraMensaje("Error al actualizar los valores de la tabla");
            }
        }

        //Determina si un string tiene el formato de una fecha
        private bool EsFecha(String SFecha)
        {
            try
            {
                CultureInfo proveedor = CultureInfo.InvariantCulture;
                DateTime.ParseExact(SFecha, "dd-MM-yyyy", proveedor);
                return true;
            }
            catch (FormatException)
            {
                return false;
            }
        }

        protected void GVAmenazas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.GVAmenazas.PageIndex = e.NewPageIndex;
            String TextoBuscar = TxtFiltro.Text;
            LlenaGridView(TextoBuscar);
        }


        private void GridViewRelacionesSeleccionadas()
        {
            try
            {
                //Recogemos el array tipado con el valor de los elementos que han sido elegidos
                List<InformeCheck> CheckList = (List<InformeCheck>)Session["Checklist"];
                List<InformeTabla> LRelacionesSelec = new List<InformeTabla>();
                //Cargamos el valor de los elementos que estuvieran seleccionados anteriormente
                for (int i = 0; i < CheckList.Count(); i++)
                {
                    if (CheckList[i].Check == true)
                    {
                        InformeTabla nuevaFila = new InformeTabla();
                        nuevaFila.IdInforme = CheckList[i].IdInforme;
                        nuevaFila.Fecha = InformesFactory.FechaInforme(CheckList[i].IdInforme);
                        nuevaFila.TipoInforme = InformesFactory.TipoInforme(CheckList[i].IdInforme);
                        LRelacionesSelec.Add(nuevaFila);
                    }
                }
                GVAmenazas.DataSource = LRelacionesSelec;
                DataBind();
                ActualizaCheckListTabla();
            }
            catch (Exception e1)
            {
                e1.ToString();
                MuestraMensaje("Error al actualizar la tabla con los elementos seleccionados");
            }
        }

        private void ActualizaCheckListTabla()
        {
            try
            {
                //Recogemos el array tipado con el valor de los elementos que han sido elegidos
                List<InformeCheck> CheckList = (List<InformeCheck>)Session["Checklist"];
                //Cargamos el valor de los elementos que estuvieran seleccionados anteriormente
                for (int i = 0; i < CheckList.Count(); i++)
                {
                    foreach (GridViewRow row in GVAmenazas.Rows)
                    {
                        int IdInforme;
                        int.TryParse(GVAmenazas.Rows[row.RowIndex].Cells[0].Text, out IdInforme);
                        if (IdInforme == CheckList[i].IdInforme)
                        {
                            CheckBox Chk = (CheckBox)row.FindControl("CheckBox1");
                            if (CheckList[i].Check)
                            {
                                Chk.Checked = true;
                            }
                            else
                            {
                                Chk.Checked = false;
                            }
                        }
                    }
                }
            }
            catch (Exception e1)
            {
                e1.ToString();
                MuestraMensaje("Error al mostrar los elementos seleccionados");
            }
        }

        //Método que se ejecuta al evento de cliquear uno de los checkbox de cualquier elemento de la tabla
        protected void CheckBox_Changued(Object sender, EventArgs e)
        {
            try
            {
                //Recuperamos las variables de sesión
                //Recogemos el valor de los elementos seleccionados en las otras paginas del GridView
                //con la variable de sesión nControlesOn
                bool seleccionado = false;
                int nControlesOn = (int)Session["nControlesOn"];
                if (nControlesOn == -1)
                    nControlesOn = 0;
                List<InformeCheck> CheckList = (List<InformeCheck>)Session["Checklist"];
                //Recorremos la página que el gridview muestra
                foreach (GridViewRow row in GVAmenazas.Rows)
                {
                    //Recogemos el control CheckBox de cada fila del gridview
                    CheckBox Chk = (CheckBox)row.FindControl("CheckBox1");
                    //Recogemos el Id de Amenaza de cada fila
                    int IdInforme;
                    int.TryParse(GVAmenazas.Rows[row.RowIndex].Cells[0].Text, out IdInforme);
                    //Si es la primera vez que se elige este elemento, aumentamos el contador
                    //y marcamos que ese elemento ya está elegido
                    if (Chk.Checked == true && !EstaRelacion(CheckList, IdInforme))
                    {
                        //Si había una seleccionada anteriormente, la deseleccionamos
                        for (int j = 0; j < CheckList.Count(); j++)
                        {
                            if (CheckList[j].Check)
                                CheckList.RemoveAt(j);
                            nControlesOn--;
                        }
                        if (nControlesOn == 0)
                        {
                            BtnConsultar.Enabled = true;
                        }
                        CheckList.Add(new InformeCheck(IdInforme, true));
                        nControlesOn++;
                        seleccionado = true;
                        if (PnlGV.Visible == true && ReportViewer1.LocalReport.DataSources.Count != 0)
                            CheckBox3.Visible = true;
                    }
                    //Sino marcamos que la relación no está elegida y actualizamos estructuras
                    else if (Chk.Checked == false && EstaRelacion(CheckList, IdInforme))
                    {
                        //Eliminamos las ocurrencias guardadas anteriormente de la relación
                        for (int i = 0; i < CheckList.Count(); i++)
                        {
                            if (CheckList[i].IdInforme == IdInforme)
                            {
                                CheckList.RemoveAt(i);
                            }
                        }

                        nControlesOn--;
                        if (nControlesOn == 0)
                        {
                            BtnConsultar.Enabled = false;
                        }
                        if (PnlGV.Visible == true && ReportViewer1.LocalReport.DataSources.Count != 0)
                            CheckBox3.Visible = true;
                    }
                }
                if (seleccionado)
                    GridViewRelacionesSeleccionadas();
                else
                {
                    String TextoBuscar = TxtFiltro.Text;
                    LlenaGridView(TextoBuscar);
                }
                //Guardamos en la variable de sesión
                Session["CheckList"] = CheckList;
                Session["nControlesOn"] = nControlesOn;
            }
            catch (Exception e1)
            {
                MuestraMensaje("Error al hacer click en el elemento de la tabla");
                e1.ToString();
            }
        }

        private bool EstaRelacion(List<InformeCheck> CheckList, int IdInforme)
        {
            for (int i = 0; i < CheckList.Count(); i++)
            {
                if (CheckList[i].IdInforme == IdInforme)
                {
                    return true;
                }
            }
            return false;
        }

        protected void BtnConsultar_Click(object sender, EventArgs e)
        {
            int IdInforme;
            int.TryParse(GVAmenazas.Rows[0].Cells[0].Text, out IdInforme);
            GeneraInforme(IdInforme);
        }

        //Método que genera el informe que se ha seleccionado
        private void GeneraInforme(int IdInforme)
        {
            try
            {
                int IdEmpresa = DatosEmpresa();
                if (IdEmpresa == -1)
                    MuestraMensaje("No se pudo recoger la Empresa");
                else
                {

                    List<ActivosEmpresa> ListaPrueba = ActivosEmpresaFactory.PruebaRecogeActivosEmpresa(IdEmpresa);

                    List<DatosEmpresaInforme> LDatosEmpresa = EmpresaInformeNegocio.DatosEmpresa(IdInforme);

                    List<PuntoIntXY> LDatosEmpresaXY = EmpresaInformeNegocio.DatosEmpresaInformeXY(IdInforme);

                    List<PuntoDoubleXY> LMadDeseableXY = EmpresaInformeNegocio.MadurezDeseableEmpresaInformeXY(IdInforme);

                    List<FechasInforme> LFechas = EmpresaInformeNegocio.FechaInforme(IdInforme);

                    List<PuntoDoubleXY> LControlesNivMadurezEmpresa = ControlesEmpresaInformeNegocio.ControlesNivelMadurezEmpresaInformeXY(IdInforme);

                    //Lista de los activos de la empresa
                    List<ActivosDatosInforme> LActivosEmpresa = ActivosInformeNegocio.RecogeActivosInforme(IdInforme);

                    //Lista de los Activos por Tipo de Activo XY
                    List<PuntoIntXY> LActivosTipoXY = ActivosInformeNegocio.ActivosTipoActivoInformeXY(IdInforme);

                    //Lista de los Activos por Valor Estratégico XY
                    List<PuntoIntXY> LActivosValorXY = ActivosInformeNegocio.ActivosValorEstrategicoInformeXY(IdInforme);


                    //Lista de Activos por Coste XY
                    List<PuntoIntXY> LActivosCosteXY = ActivosInformeNegocio.ActivosCosteInformeXY(IdInforme);

                    //Lista de Controles por Dominio 1 de 2 XY
                    List<PuntoIntXY> LControlesObj1d2XY = ControlesEmpresaInformeNegocio.RecogeControlesDominioInforme1de2XY(IdInforme);
                    //Lista de Controles por Dominio 2 de 2 XY
                    List<PuntoIntXY> LControlesObj2d2XY = ControlesEmpresaInformeNegocio.RecogeControlesDominioInforme2de2XY(IdInforme);
                    //Lista de Controles de Empresa para la Tabla
                    List<ControlesEmpresaDatosInforme> LControlesTabla = ControlesEmpresaInformeNegocio.RecogeControlesInformeTabla(IdInforme);
                    //Lista de Relaciones Seleccionadas por una Empresa 1 de 2 XY
                    List<PuntoIntXY> LRelacionesEmp1de2 = EmpresaInformeNegocio.RelacionesInforme1de2XY(IdInforme);
                    //Lista de Relaciones Seleccionadas por una Empresa 2 de 2 XY
                    List<PuntoIntXY> LRelacionesEmp2de2 = EmpresaInformeNegocio.RelacionesInforme2de2XY(IdInforme);

                    //Lista para la Tabla de Análisis de Riesgo
                    List<AnalisisRiesgoDatosInforme> LAnalisRiesgoTabla = AnalisisRiesgoNegocio.RecogeAnalisRiesgoInforme(IdInforme);

                    //Lista para hacer el Plan de Mejora
                    List<PlanMejoraInforme> LPlanMejoraInforme = PlanMejoraInformeNegocio.RecogePlanMejoraInforme(IdInforme);


                    //Creamos la estructura donde formatearemos los resultados de los métodos con los componentes del informe
                    ReportDataSource dataSource = new ReportDataSource();
                    //Llenamos el datasource y lo incluimos en el ReportViewer
                    dataSource = new ReportDataSource();
                    dataSource.Name = "DataSet2";
                    dataSource.Value = ListaPrueba;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    dataSource = new ReportDataSource();
                    dataSource.Name = "DataSet3";
                    dataSource.Value = LDatosEmpresa;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    dataSource = new ReportDataSource();
                    dataSource.Name = "DataSetDatosEmpresaXY";
                    dataSource.Value = LDatosEmpresaXY;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Dataset para la fecha de la portada del informe
                    dataSource = new ReportDataSource();
                    dataSource.Name = "Fechas";
                    dataSource.Value = LFechas;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Gráfico en barra del Nivel de Madurez Actual
                    dataSource = new ReportDataSource();
                    dataSource.Name = "MadDeseableXY";
                    dataSource.Value = LMadDeseableXY;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Gráfico Radial del Nivel de Madurez Deseable
                    dataSource = new ReportDataSource();
                    dataSource.Name = "ControlesNivMadurezEmpresa";
                    dataSource.Value = LControlesNivMadurezEmpresa;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Gráfico de Activos por Tipo de Activo
                    dataSource = new ReportDataSource();
                    dataSource.Name = "ActivosTipoActivoXY";
                    dataSource.Value = LActivosTipoXY;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);


                    //Gráfico de los Activos por Valor Estratégico
                    dataSource = new ReportDataSource();
                    dataSource.Name = "ActivosValorEstrategicoXY";
                    dataSource.Value = LActivosValorXY;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Gráfico de los Activos por Coste (€)
                    dataSource = new ReportDataSource();
                    dataSource.Name = "ActivosCosteXY";
                    dataSource.Value = LActivosCosteXY;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Tabla de los Activos
                    dataSource = new ReportDataSource();
                    dataSource.Name = "ActivosEmpresaTabla";
                    dataSource.Value = LActivosEmpresa;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Gráfico de Respuestas de Controles por Objetivos de Control 1 de 2
                    dataSource = new ReportDataSource();
                    dataSource.Name = "ControlesDominio1de2XY";
                    dataSource.Value = LControlesObj1d2XY;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Gráfico de Respuestas de Controles por Objetivos de Control 2 de 2
                    dataSource = new ReportDataSource();
                    dataSource.Name = "ControlesDominio2de2XY";
                    dataSource.Value = LControlesObj2d2XY;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Gráfico de Respuestas de Controles por Objetivos de Control 2 de 2
                    dataSource = new ReportDataSource();
                    dataSource.Name = "ControlesEmpresaInformeTabla";
                    dataSource.Value = LControlesTabla;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Gráfico de Relaciones de la Empresa por Tipo de Activo 1 de 2
                    dataSource = new ReportDataSource();
                    dataSource.Name = "RelacionesEmpresa1de2XY";
                    dataSource.Value = LRelacionesEmp1de2;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Gráfico de Relaciones de la Empresa por Tipo de Activo 1 de 2
                    dataSource = new ReportDataSource();
                    dataSource.Name = "RelacionesEmpresa2de2XY";
                    dataSource.Value = LRelacionesEmp2de2;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Tabla de Relaciones de Análisis de Riesgo
                    dataSource = new ReportDataSource();
                    dataSource.Name = "AnalisisRiesgoTabla";
                    dataSource.Value = LAnalisRiesgoTabla;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Tabla de Plan de Mejora
                    dataSource = new ReportDataSource();
                    dataSource.Name = "PlanMejoraTabla";
                    dataSource.Value = LPlanMejoraInforme;
                    ReportViewer1.LocalReport.DataSources.Add(dataSource);

                    //Recogemos el nombre que tiene la plantilla de informe
                    String reportName = "rptAnalisisRiesgo.rdlc";
                    //Se lo asignamos al ReportViewer
                    ReportViewer1.LocalReport.ReportPath = reportName;
                    PnlReport.Visible = true;
                    PnlGV.Visible = false;
                }
            }
            catch (Exception e1)
            {
                e1.ToString();
                MuestraMensaje("Error al generar el informe");
                PnlGV.Visible = true;
                PnlReport.Visible = false;
            }
        }

        protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (CheckBox2.Checked == true)
            {
                int nControlesOn = (int)Session["nControlesOn"];
                List<InformeCheck> CheckList = (List<InformeCheck>)Session["Checklist"];
                PnlReport.Visible = false;
                //Recogemos el control CheckBox de cada fila del gridview
                GridViewRow row = GVAmenazas.Rows[0];
                CheckBox Chk = (CheckBox)row.FindControl("CheckBox1");
                //Recogemos el Id de Amenaza de cada fila
                int IdInforme;
                int.TryParse(GVAmenazas.Rows[row.RowIndex].Cells[0].Text, out IdInforme);
                //Si es la primera vez que se elige este elemento, aumentamos el contador
                //y marcamos que ese elemento ya está elegido
                Chk.Checked = false;
                //Eliminamos las ocurrencias guardadas anteriormente de la relación
                for (int i = 0; i < CheckList.Count(); i++)
                {
                    if (CheckList[i].IdInforme == IdInforme)
                    {
                        CheckList.RemoveAt(i);
                    }
                }
                nControlesOn--;
                if (nControlesOn == 0)
                {
                    BtnConsultar.Enabled = false;
                }
                Session["CheckList"] = CheckList;
                Session["nControlesOn"] = nControlesOn;
                String TextoBuscar = TxtFiltro.Text;
                LlenaGridView(TextoBuscar);
                PnlGV.Visible = true;
                CheckBox2.Checked = false;
                if (PnlGV.Visible == true && ReportViewer1.LocalReport.DataSources.Count != 0)
                    CheckBox3.Visible = true;
            }
        }

        private void MuestraMensaje(string Mensaje)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Success", SB.ToString(), true);
        }


        private int DatosEmpresa()
        {
            try
            {
                int IdEmpresa = -1;
                String nombreUsuario = (String)Session["nombreUsuario"];
                IdEmpresa = UsuariosFactory.EmpresaUsuario(nombreUsuario);
                if (IdEmpresa == 0)
                {
                    MuestraMensaje("El usuario " + nombreUsuario + " no esta asociado a una empresa");
                    return -1;
                }
                else
                {
                    return IdEmpresa;
                }
            }
            catch (Exception e1)
            {
                e1.ToString();
                Session.Abandon();
                MuestraMensajeRedirige("Error al recoger la variable de sesión. La aplicación se cerrará por motivos de seguridad", "InicioSesion");
                return -1;
            }
        }

        private void MuestraMensajeRedirige(string Mensaje, string Pagina)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            SB.Append("var vers = navigator.appVersion;if(vers.indexOf('MSIE 7.0') != -1) { window.location='" + Pagina + ".aspx';} else{ window.location='" + Pagina + ".aspx'; }");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Success", SB.ToString(), true);
        }

        protected void CheckBox3_CheckedChanged(object sender, EventArgs e)
        {
            if (CheckBox3.Checked == true)
            {
                PnlGV.Visible = false;
                PnlReport.Visible = true;
                CheckBox3.Checked = false;
            }
            else
            {
                PnlGV.Visible = true;
                PnlReport.Visible = false;
                CheckBox3.Checked = false;
            }
        }

        protected void BtnBuscar_Click(object sender, EventArgs e)
        {
            String TextoBuscar = TxtFiltro.Text;
            LlenaGridView(TextoBuscar);
            ActualizaCheckListTabla();
        }


    }
}